#include <stdio.h>
#include <stdlib.h>

typedef int ElemSet;

typedef struct ListNode *Position; /* 指针即结点位置 */
struct ListNode {
    ElemSet data; /* 存储数据*/
    Position next; /* 线性表中下一个元素的位置 */
};
typedef struct HeadNode *List;
struct HeadNode {
    Position head; /* 单链表头指针 */
    int length; /* 表长 */
};

/* 算法2-7：在单链表list的第i个位置上插入元素x  Insert (list, i, x) */
void Insert(List list, int i, ElemSet x) {
    /* i是插入位置的序号，从1开始 */
    Position new_node, p;
    int counter;

    if (i < 1) { /* 插入位置不合法，退出 */
        printf("错误：插入位置不合法。\n");
        return;
    }
    if (i == 1) { /* 插入第1个结点 */
        new_node = (Position)malloc(sizeof(struct ListNode)); /* 创建新的结点 */
        new_node->data = x;
        new_node->next = list->head; /* 将新结点插入链表头 */
        list->head = new_node;
        list->length++;
    } else { /*  i>1，寻找第 i-1 个结点并插入其后 */
        p = list->head;
        counter = 1;
        while ((p != NULL) && (counter < (i - 1))) { /* 找第 i-1 个结点 */
            p = p->next;
            counter++;
        }
        if (p != NULL) { /* p指向第 (i-1)个结点 */
            new_node = (Position)malloc(sizeof(struct ListNode)); /* 创建新的结点 */
            new_node->data = x;
            new_node->next = p->next; /* 将新结点插在p后面 */
            p->next = new_node;
            list->length++;
        } else { /* 插入位置不合法，退出 */
            printf("错误：插入位置不合法。\n");
        }
    }
}
/* 算法2-7 结束 */

int main(void) {
    int i, n, x;
    Position p;
    List list;

    list = (List)malloc(sizeof(struct HeadNode));
    list->head = NULL;
    list->length = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        scanf("%d", &x);
        Insert(list, i, x);
    }
    printf("%d:", list->length);
    p = list->head;
    while (p != NULL) {
        printf(" %d", p->data);
        p = p->next;
    }
    printf("\n");
    Insert(list, 0, x);
    Insert(list, n + 2, x);
    return 0;
}